package com.wangle.base.agent.jdk;


import com.wangle.base.agent.jdk.code.Service;
import com.wangle.base.agent.jdk.code.ServiceHandler;
import com.wangle.base.agent.jdk.code.ServiceImpl;

import java.lang.reflect.Proxy;

/**
 *   1.实现InvocationHandler接口得到一个切面类
 *   2.利用Proxy根据目标类的类加载器、类接口、切面类生成一个代理类
 *   3.调用接口方法，代理类将所有的调用转发到切面类的invoke()方法
 *   4.利用反射调用目标类的方法
 */
public class Main {
    public static void main(String[] args) {
        ServiceImpl service = new ServiceImpl();
        Service serviceAgent = (Service)Proxy.newProxyInstance(
                service.getClass().getClassLoader(),
                service.getClass().getInterfaces(),
                new ServiceHandler(service));
        serviceAgent.hand();
    }
}
